package edu.xjnu.uitls;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.schema.Table;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.baomidou.mybatisplus.extension.plugins.inner.*;

//@Configuration
//@MapperScan(value = "edu.xjnu.mapper")
public class MyBatisPlusConfig {
    /**
     * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
     */
    //@Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

        // 分页插件
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));

        // 防全表更新与删除插件
        interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());

        // 数据变动记录插件
        interceptor.addInnerInterceptor(new DataChangeRecorderInnerInterceptor());

        // 数据权限处理器
        interceptor.addInnerInterceptor(new DataPermissionInterceptor());

        // 动态表名插件
        interceptor.addInnerInterceptor(new DynamicTableNameInnerInterceptor());

        // 不规范SQL拦截器
        interceptor.addInnerInterceptor(new IllegalSQLInnerInterceptor());

        // 乐观锁插件
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());

        // 多租户插件
        interceptor.addInnerInterceptor(new TenantLineInnerInterceptor());

        return interceptor;
    }
}
